#ifndef LOG_H
#define LOG_H

#include <stdio.h>

// 定义日志级别
#define LOG_LEVEL_DEBUG 0
#define LOG_LEVEL_INFO  1
#define LOG_LEVEL_ERROR 2

// 配置当前日志级别（可以根据需求调整日志输出级别）
#define CURRENT_LOG_LEVEL LOG_LEVEL_DEBUG

// 定义日志宏
#define LOG_DBG(fmt, ...) \
    do { if (CURRENT_LOG_LEVEL <= LOG_LEVEL_DEBUG) fprintf(stdout, "[DEBUG] %s:%d: " fmt "\n", __FILE__, __LINE__, ##__VA_ARGS__); } while(0)

#define LOG_INFO(fmt, ...) \
    do { if (CURRENT_LOG_LEVEL <= LOG_LEVEL_INFO) fprintf(stdout, "[INFO] " fmt "\n", ##__VA_ARGS__); } while(0)

#define LOG_ERR(fmt, ...) \
    do { if (CURRENT_LOG_LEVEL <= LOG_LEVEL_ERROR) fprintf(stderr, "[ERROR] %s:%d: " fmt "\n", __FILE__, __LINE__, ##__VA_ARGS__); } while(0)
#endif//__FILE__：表示当前源码文件的文件名,__LINE__：表示当前源码文件中的行号
//__VA_ARGS__ 是 C 标准中用于表示可变参数的符号。它允许宏接受任意数量的参数，从而实现类似 printf 的功能。
//## 的作用是，当 __VA_ARGS__ 为空时（即没有传递额外参数时），它会将前面的逗号 , 自动去掉，避免编译错误。